home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 103 / XENIATGM103.iso / Shareware / GoLive 5.0 / MM9.Cab / F1495_ado.actions5.asp.9B3B646D_CB56_4EAE_BAB7_3E7E8E41A649 < prev    next >
Text File  |  2000-08-17  |  22KB  |  687 lines

  1. <!-- #INCLUDE FILE="../include/utils.runtime5.asp" -->
  2. <!-- #INCLUDE FILE="../include/ado.runtime5.asp" -->
  3.  
  4. <SCRIPT runat="server" language="VBScript">
  5.  
  6. ' *****************************************************************************
  7. '
  8. ' include/ado.actions5.asp
  9. '
  10. ' Dynamic Link runtime support for Microsoft ADO.
  11. '
  12. ' COPYRIGHT (c) 1999-2000 Adobe Systems Incorporated. All rights reserved.
  13. '
  14. ' -----------------------------------------------------------------------------
  15.  
  16. dim setup
  17. setup = false
  18.  
  19. ' -----------------------------------------------------------------------------
  20. ' SetupADOAction
  21. ' -----------------------------------------------------------------------------
  22.  
  23. function SetupADOAction(contentSource, allRecords)
  24.     if False = RuntimeDebug then
  25.         on error resume next
  26.     end if
  27.  
  28.     if setup then
  29.         exit function
  30.     end if
  31.     setup = true
  32.  
  33.     'Close parent <input>
  34.     Response.Write(">")
  35.  
  36.     call CSWRecordSet_SetupForm( contentSource )
  37.  
  38.     if allRecords then
  39.         contentSource.MoveFirst
  40.         if 0 = contentSource.BlockSize then
  41.             while not contentSource.EOF
  42.                 keyName = chr(34) & "$key[" & contentSource.AbsolutePosition & "]" & chr(34)
  43.                 key = chr(34) & contentSource.Key() & chr(34)
  44.                 Response.Write("<input type=" & chr(34) & "hidden" & chr(34) & " name=" & keyName & " value=" & key & ">")
  45.                 contentSource.MoveNext
  46.             wend
  47.         else
  48.             index = GetRecordIndex()
  49.             contentSource.Move index - 1
  50.             while ( not contentSource.EOF ) and ( contentSource.AbsolutePosition <= ( index + contentSource.BlockSize -1 ))
  51.                 keyName = "'$key[" & contentSource.AbsolutePosition & "]'"
  52.                 key = chr(34) & contentSource.Key() & chr(34)
  53.                 Response.Write("<input type=" & chr(34) & "hidden" & chr(34) & " name=" & keyName & " value=" & key & ">")
  54.                 contentSource.MoveNext
  55.             wend
  56.         end if
  57.     else
  58.         keyName = chr(34) & "$key" & chr(34)
  59.         key = chr(34) & contentSource.Key() & chr(34)
  60.         Response.Write("<input type=" & chr(34) & "hidden" & chr(34) & " name=" & keyName & " value=" & key & ">")
  61.     end if
  62.  
  63.     ' Protect original close of parent <input>
  64.     Response.Write("<")
  65.     Response.Write("wbr")
  66.  
  67. end function
  68.  
  69.  
  70. ' -----------------------------------------------------------------------------
  71. ' SubmitChanges
  72. ' -----------------------------------------------------------------------------
  73.  
  74. function SubmitChanges()
  75.     ActionSubmitChanges
  76. end function
  77.  
  78.  
  79. ' -----------------------------------------------------------------------------
  80. ' AddRecord
  81. ' -----------------------------------------------------------------------------
  82.  
  83. function AddRecord()
  84.     ActionAddRecord
  85. end function
  86.  
  87.  
  88. ' -----------------------------------------------------------------------------
  89. ' DeleteRecord
  90. ' -----------------------------------------------------------------------------
  91.  
  92. function DeleteRecord()
  93.     ActionDeleteRecord
  94. end function
  95.  
  96.  
  97. ' -----------------------------------------------------------------------------
  98. ' DuplicateRecord
  99. ' -----------------------------------------------------------------------------
  100.  
  101. function DuplicateRecord()
  102.     ActionDuplicateRecord
  103. end function
  104.  
  105.  
  106. ' -----------------------------------------------------------------------------
  107. ' Dispatch
  108. ' -----------------------------------------------------------------------------
  109.  
  110. if InStr(Request.ServerVariables("PATH_TRANSLATED"), "ado.actions5.asp") then
  111.  
  112.     if Request("$SubmitChanges").Count > 0 or Request("$SubmitChanges.x").Count > 0 then
  113.         SubmitChanges
  114.     elseif Request("$AddRecord").Count > 0 or Request("$AddRecord.x").Count > 0 then
  115.         AddRecord
  116.     elseif Request("$DeleteRecord").Count > 0 or Request("$DeleteRecord.x").Count > 0 then
  117.         DeleteRecord
  118.     elseif Request("$DuplicateRecord").Count > 0 or Request("$DuplicateRecord.x").Count > 0 then
  119.         DuplicateRecord
  120.     else    ' default action
  121.         SubmitChanges
  122.     end if
  123.  
  124. end if
  125.  
  126. </SCRIPT>
  127.  
  128. <SCRIPT runat="server" language="JScript">
  129.  
  130. // *****************************************************************************
  131. // SERVER SIDE ACTIONS
  132. //
  133.  
  134. // -----------------------------------------------------------------------------
  135. // Action handler functions
  136.  
  137. function ActionSubmitChanges()
  138. {
  139.     var source       = unobscure( Request.Form( "$source" ));
  140.     var connect       = unobscure( Request.Form( "$connect" ));
  141.     var key           = unescape( Request.Form( "$key" ));
  142.     var tableName  = getTableNameFromSource( source );
  143.     var connection = new ActiveXObject( "ADODB.Connection" );
  144.  
  145.     connection.open( connect );
  146.     if( key == "$newRecord" ){
  147.         addRecordUsingPostDataInsertQuery( connection, tableName );
  148.     }else{
  149.         updateUsingPostDataUpdateQuery( connection, tableName );
  150.     }
  151.     Response.Redirect(Request.Form( "$return" ));
  152.     return;
  153. }
  154.  
  155.  
  156. function ActionDeleteRecord()
  157. {
  158.     var source       = unobscure( Request.Form( "$source" ));
  159.     var connect       = unobscure( Request.Form( "$connect" ));
  160.     var tableName  = getTableNameFromSource( source );
  161.     var connection = new ActiveXObject( "ADODB.Connection" );
  162.     var returnURL  = Request.Form( "$return" );
  163.     var currentRecordIndex = getCurrentRecordIndexFromURL( returnURL );
  164.  
  165.     connection.open( connect );
  166.     var recordCount = getRecordCountBySelectQuery( connection, tableName );
  167.     var redirectURL = setRecordIndexInURL( returnURL, Math.min(currentRecordIndex, recordCount-1 ));
  168.  
  169.     deleteUsingPostDataDeleteQuery( connection, tableName );
  170.  
  171.     Response.Redirect( redirectURL );
  172.     return;
  173. }
  174.  
  175.  
  176. function ActionAddRecord()
  177. {
  178.     var source       = unobscure( Request.Form( "$source" ));
  179.     var connect       = unobscure( Request.Form( "$connect" ));
  180.     var tableName  = getTableNameFromSource( source );
  181.     var connection = new ActiveXObject( "ADODB.Connection" );
  182.     var returnURL  = Request.Form( "$return" );
  183.     var currentRecordIndex = getCurrentRecordIndexFromURL( returnURL );
  184.  
  185.     connection.open( connect );
  186.     var recordCount = getRecordCountBySelectQuery( connection, tableName );
  187.     var redirectURL = setRecordIndexInURL( returnURL, recordCount+1 );
  188.  
  189.     addRecordUsingPostDataInsertQuery( connection, tableName );
  190.  
  191.     Response.Redirect( redirectURL );
  192.     return;
  193. }
  194.  
  195.  
  196. function ActionDuplicateRecord()
  197. {
  198.     ActionAddRecord();
  199. }
  200.  
  201.  
  202. function getRecordCountBySelectQuery( connection, tableName )
  203. {
  204.     var sqlCommand = "SELECT COUNT(0) FROM " + tableName;
  205.     var result=connection.Execute( sqlCommand );
  206.     var ret = result.Fields.Item(0).Value;
  207.     return ret;
  208. }
  209.  
  210.  
  211. function getCurrentRecordIndexFromURL( URL )
  212. {
  213.     var recordIndex = 1;
  214.     var currentURL = new String( URL );
  215.     var a = currentURL.indexOf( "RECORD_INDEX" );
  216.     if( a == -1 ){
  217.         a = currentURL.indexOf("RECORD%5FINDEX");        // URL-encoded '_'
  218.     }
  219.     if( 1 < a ){                                      // RECORD_INDEX was found
  220.         var b = currentURL.indexOf( "=", a );
  221.         if( a < b ){
  222.             var c = currentURL.indexOf( "&", b );
  223.             if( b < c ){
  224.                 recordIndex = Number( currentURL.substring( b+1, c ));
  225.             } else {                                        // RECORD_INDEX was last parameter
  226.                 recordIndex = Number( currentURL.substring( b+1, currentURL.length ));
  227.             }
  228.         }
  229.     }
  230.     return recordIndex;
  231. }
  232.  
  233.  
  234. function setRecordIndexInURL( originalURL, nextRecordIndex )
  235. {
  236.     var queryString = new String( originalURL );
  237.     var returnURL = new String( queryString );
  238.     var a = queryString.indexOf( "RECORD_INDEX" );
  239.     if( a == -1 ){
  240.         a = queryString.indexOf( "RECORD%5FINDEX" );      // URL-encoded '_'
  241.     }
  242.     if( 1 < a ){                                      // RECORD_INDEX was found
  243.         var b = queryString.indexOf( "=", a );
  244.         if( a < b ){
  245.             var c = queryString.indexOf( "&", b );
  246.             if( b < c ){
  247.                 returnURL = queryString.substring( 0, a ) + "RECORD_INDEX=" + nextRecordIndex + queryString.substring( c, queryString.length );
  248.             }else{                                          // RECORD_INDEX was last parameter
  249.                 returnURL = queryString.substring( 0, a ) + "RECORD_INDEX=" + nextRecordIndex;
  250.             }
  251.         }
  252.     }else{                                                  // RECORD_INDEX was not found
  253.         if(( queryString.lastIndexOf( "?" ) == queryString.length-1 ) ||       // ending with "?"
  254.            ( queryString.lastIndexOf("&")    == queryString.length-1 )) {       // ending with "&"
  255.             returnURL = queryString + "RECORD_INDEX=" + nextRecordIndex;
  256.         } else {
  257.             if( 1 < queryString.indexOf( "?" )){
  258.                 returnURL = queryString + "&RECORD_INDEX=" + nextRecordIndex;
  259.             }else{
  260.                 returnURL = queryString + "?RECORD_INDEX=" + nextRecordIndex;    // no other URL parameter
  261.             }
  262.         }
  263.     }
  264.     return returnURL;
  265. }
  266.  
  267.  
  268. function encodeSQL( string )
  269. {
  270.     return    string.split("'").join("''");
  271. }
  272.  
  273.  
  274. // *****************************************************************************
  275. // wrapSQLFieldValue
  276. //     mode: 0 / just put blanket
  277. //           1 / Where clause
  278.  
  279. function wrapSQLFieldValue( connection, value, datatype, mode )
  280. {
  281.     var retString = "";
  282.     var tempValue = encodeSQL( value );
  283.  
  284.     var wildCardChar = "";
  285.     var prefix1999 = "";
  286.     var suffix1999 = "";
  287.     var prefix2000 = "";
  288.     var suffix2000 = "";
  289.  
  290.     switch( String( connection.Properties.Item( "Provider Friendly Name" ))){
  291.         case "Microsoft OLE DB Provider for ODBC Drivers":
  292.             switch( String( connection.Properties.Item( "DBMS Name" ))){
  293.                 case "ACCESS":
  294.                     wildCardChar = "%";
  295.                     prefix1999 = "#";
  296.                     suffix1999 = "#";
  297.                     prefix2000 = "#";
  298.                     suffix2000 = "#";
  299.                     break;
  300.                 case "Oracle8":
  301.                 case "Oracle":
  302.                     wildCardChar = "%";
  303.                     prefix1999 = "to_date('";
  304.                     suffix1999 = "','yyyy/mm/dd hh24:mi:ss')";
  305.                     prefix2000 = "to_date('";
  306.                     suffix2000 = "','yyyy/mm/dd hh24:mi:ss')";
  307.                     break;
  308.                 case "Microsoft SQL Server":
  309.                     wildCardChar = "%";
  310.                     prefix1999 = "'";
  311.                     suffix1999 = "'";
  312.                     prefix2000 = "'";
  313.                     suffix2000 = "'";
  314.                     break;
  315.                 default:
  316.                     if( RuntimeDebug ){
  317.                         RuntimeDebugMessage( "Unsupported ODBC driver: \"DBMS Name\" = [" + connection.Properties.Item( "DBMS Name" ) + "]<br>\n" );
  318.                     }
  319.                     wildCardChar = "%";
  320.                     prefix1999 = "'";
  321.                     suffix1999 = "'";
  322.                     prefix2000 = "'";
  323.                     suffix2000 = "'";
  324.                     break;
  325.             }
  326.             break;
  327.         case "Microsoft OLE DB Provider for SQL Server":
  328.         case "Microsoft OLE DB Provider for Jet":
  329.             wildCardChar = "%";
  330.             prefix1999 = "'";
  331.             suffix1999 = "'";
  332.             prefix2000 = "'";
  333.             suffix2000 = "'";
  334.             break;
  335.         case "Microsoft OLE DB Provider for Oracle":
  336.             wildCardChar = "%";
  337.             prefix1999 = "to_date('";
  338.             suffix1999 = "','yyyy/mm/dd hh24:mi:ss')";
  339.             prefix2000 = "to_date('";
  340.             suffix2000 = "','yyyy/mm/dd hh24:mi:ss')";
  341.             break;
  342.         default:
  343.             if( RuntimeDebug ){
  344.                 RuntimeDebugMessage( "Unsupported ODBC driver: \"Provider Friendly Name\" = [" + connection.Properties.Item("Provider Friendly Name") + "]<br>\n" );
  345.             }
  346.             wildCardChar = "%";
  347.             prefix1999 = "'";
  348.             suffix1999 = "'";
  349.             prefix2000 = "'";
  350.             suffix2000 = "'";
  351.             break;
  352.     }
  353.  
  354.     switch( Number( datatype )){
  355.         case adEmpty:
  356.             if( mode == 0 ) retString = "''";
  357.             else            retString = " IS NULL";
  358.             break;
  359.         case adBigInt:
  360.         case adDecimal:
  361.         case adDouble:
  362.         case adInterger:
  363.         case adNumeric:
  364.         case adSingle:
  365.         case adSmallInt:
  366.         case adTinyInt:
  367.         case adUnsignedBigInt:
  368.         case adUnsignedInt:
  369.         case adUnsignedSmallInt:
  370.         case adUnsignedTinyInt:
  371.         case adVarNumeric:
  372.             if( mode == 0 ) retString = tempValue;
  373.             else            retString = "=" + tempValue;
  374.             break;
  375.         case adDate:
  376.         case adDBDate:
  377.         case adDBTime:
  378.         case adDBTimeStamp:
  379.             var checkYear = new Date( value );
  380.             if( mode == 0 ){
  381.                 if( checkYear.getYear() <= 99 ) retString = prefix1999 + tempValue + suffix1999;
  382.                 else                            retString = prefix2000 + tempValue + suffix2000;
  383.             }else{
  384.                 if(( tempValue == "" )||( tempValue.toUpperCase() == "NULL" ))     retString = " IS NULL";
  385.                 else{
  386.                     if( checkYear.getYear() <= 99 ) retString = "=" + prefix1999 + tempValue + suffix1999;
  387.                     else                            retString = "=" + prefix2000 + tempValue + suffix2000;
  388.                 }
  389.             }
  390.             break;
  391.         case adBSTR:
  392.         case adChar:
  393.         case adWChar:
  394.         case adVarChar:
  395.         case adVarWChar:
  396.             if( mode == 0 ) retString = "'" + tempValue + "'";
  397.             else{
  398.                 if( tempValue.toUpperCase() == "NULL" ) retString = " IS NULL";
  399.                 else if( tempValue == "" )                retString = "=''";
  400.                 else                                    retString = " like '" + tempValue + wildCardChar + "'";
  401.             }
  402.             break;
  403.         case adLongVarChar:    //    Access Memo type / Oracle long text
  404.         case adLongVarWChar://    MS-SQL long Unicode string
  405.             if( mode == 0 ) retString = "'" + tempValue + "'";
  406.             else            retString = "";                        // cannot use at Where clause
  407.             break;
  408.         default:
  409.             if( RuntimeDebug ){
  410.                 RuntimeDebugMessage( "<hr><h1>Unsupported datatype</h1><br>\n" );
  411.                 RuntimeDebugMessage( "datatype = [" + datatype + "]<br>value=[" + value + "]<hr>\n" );
  412.             }
  413.             break;
  414.     }
  415.     return retString;
  416. }
  417.  
  418.  
  419. function makeFieldWhere( connection, key, datatypeSet, datatypeCount )
  420. {
  421.     var rawKeys = String( key ).split( "&" );
  422.     var whereString = "";
  423.     var counter = 0;
  424.     for( var i = 0; i < rawKeys.length; i++ ){
  425.         var keyDelim = rawKeys[i].indexOf( "=" );
  426.         var keyName     = unescape( rawKeys[i].substring( 0, keyDelim ));
  427.         var keyValue = unescape( rawKeys[i].substring( keyDelim + 1 ));
  428.         var datatype = 0;
  429.         if( keyName == "" ) continue;
  430.         for( var j = 0; j < datatypeCount; j++ ){
  431.             if( keyName == datatypeSet[j].name ){
  432.                 datatype = datatypeSet[j].type;
  433.                 break;
  434.             }
  435.         }
  436.  
  437.         var tempValue = keyValue;
  438.         var tempString = wrapSQLFieldValue( connection, tempValue, datatype, 1 );
  439.         if( tempString == "" )    continue;
  440.         if( counter == 0 )    whereString = keyName + tempString;
  441.         else                whereString += " AND " + keyName + tempString;
  442.         counter++;
  443.     }
  444.     return whereString;
  445. }
  446.  
  447.  
  448. function getDatatypeSet( datatypeSet )
  449. {
  450.     var datatypeCount = 0;
  451.     var rawDatatypes = unobscure( Request.Form( "$datatypes" ));
  452.     var datatypes = rawDatatypes.split( '&' );
  453.     for( var i = 0; i < datatypes.length; i++ ){
  454.         var indexOf = datatypes[i].indexOf( "=" );
  455.         if( indexOf <= 0 )    continue;
  456.         datatypeSet[datatypeCount] = new Object;
  457.         datatypeSet[datatypeCount].name = datatypes[i].substring( 0, indexOf );
  458.         datatypeSet[datatypeCount].type = datatypes[i].substring( indexOf+1, datatypes[i].length );
  459.         datatypeCount++;
  460.     }
  461.     return datatypeCount;
  462. }
  463.  
  464.  
  465. function getDataFromFormData( data, datatypeSet, datatypeCount )
  466. {
  467.     var dataCount = 1;
  468.     data[0] = new Object;
  469.     data[0].fieldCount = 0;
  470.     data[0].paramArray = 0;
  471.     data[0].field = new Array;
  472.     var args = String( Request.Form ).split( "&" );
  473.     for( var counter = 0; counter < args.length; counter++ ){
  474.         var regExp = /\+/i;     // "+"
  475.         while( args[counter].match( regExp ) != null ){
  476.             args[counter] = args[counter].replace( regExp, "%20" );
  477.         }
  478.         args[counter] = unescape( args[counter] );
  479.         if( args[counter].charAt( 0 ) == '$' ){
  480.             continue;
  481.         }
  482.         
  483.         var pointEqual = args[counter].indexOf( "=", 0 );
  484.         if( pointEqual == -1 ){
  485.             continue;
  486.         }
  487.         var pointBlaketStart = args[counter].lastIndexOf( "[", pointEqual );
  488.         var pointBlaketEnd     = args[counter].lastIndexOf( "]", pointEqual );
  489.         var arrayNumber = 0;
  490.         var paramName = "";
  491.         var paramValue = "";
  492.  
  493.         if(( pointBlaketStart == -1 )&&( pointBlaketEnd == -1 )){    // no []
  494.             paramName = args[counter].substring( 0, pointEqual );
  495.             paramValue = args[counter].substring( pointEqual+1, args[counter].length );
  496.         }else if( pointBlaketEnd <= pointBlaketStart ){                //    error
  497.             paramName = args[counter].substring( 0, pointBlaketStart-1 );
  498.             continue;
  499.         }else{                                                        //    [] case
  500.             arrayNumber = Number( args[counter].substring( pointBlaketStart+1, pointBlaketEnd ));
  501.             paramName = args[counter].substring( 0, pointBlaketStart );
  502.             paramValue = args[counter].substring( pointEqual+1, args[counter].length );
  503.         }
  504.         var checkArray = -1;
  505.         for( var i = 0; i < dataCount; i++ ){
  506.             if( data[i].paramArray == 0 ){
  507.                 data[i].paramArray = arrayNumber;
  508.                 checkArray = i;
  509.                 break;
  510.             }
  511.             if( data[i].paramArray == arrayNumber ){
  512.                 checkArray = i;
  513.                 break;
  514.             }
  515.         }
  516.         if( checkArray == -1 ){
  517.             data[dataCount] = new Object;
  518.             data[dataCount].fieldCount = 0;
  519.             data[dataCount].paramArray = arrayNumber;
  520.             data[dataCount].field = new Array;
  521.             checkArray = dataCount;
  522.             dataCount++;
  523.         }
  524.         data[checkArray].field[data[checkArray].fieldCount] = new Object;
  525.         data[checkArray].field[data[checkArray].fieldCount].name = paramName;
  526.         data[checkArray].field[data[checkArray].fieldCount].value = paramValue;
  527.  
  528.         var comp01 = paramName.toUpperCase();
  529.         for( var j = 0; j < datatypeCount; j++ ){
  530.             var comp02 = datatypeSet[j].name.toUpperCase();
  531.             if( comp01 == comp02 ){
  532.                 data[checkArray].field[data[checkArray].fieldCount].datatype = datatypeSet[j].type;
  533.                 break;
  534.             }
  535.         }
  536.         data[checkArray].fieldCount++;
  537.     }
  538.     return    dataCount;
  539. }
  540.  
  541.  
  542. function getKeyFromFormData( key, data, dataCount )
  543. {
  544.     var keyCount = 0;
  545.     if( dataCount == 1 ){
  546.         key[0] = new Object;
  547.         key[0].key = unescape( Request.Form( "$key" ));
  548.         key[0].paramArray = 1;
  549.         data[0].paramArray = 1;
  550.         keyCount = 1;
  551.     }else{
  552.         for( var i = 0; i < dataCount; i++ ){
  553.             var keyName = "$key[" + data[i].paramArray + "]";
  554.             if( Request.QueryString( keyName ).Count >= 1) {
  555.                 keyCount = i;
  556.                 break;
  557.             }
  558.             key[i] = new Object;
  559.             key[i].key = unescape( Request.Form( keyName ));
  560.             key[i].paramArray = data[i].paramArray;
  561.         }
  562.         if( keyCount == 0 ) keyCount = dataCount;
  563.     }
  564.     return keyCount;
  565. }
  566.  
  567.  
  568. function updateUsingPostDataUpdateQuery( connection, tableName )
  569. {
  570.     var datatypeSet = new Array;
  571.     var datatypeCount = getDatatypeSet( datatypeSet );
  572.  
  573.     var data = new Array;
  574.     var dataCount = getDataFromFormData( data, datatypeSet, datatypeCount );
  575.  
  576.     var key = new Array;
  577.     var keyCount = getKeyFromFormData( key, data, dataCount );
  578.  
  579.     for( var i = 0; i < dataCount; i++ ){
  580.         var matchParamArray;
  581.         for( matchParamArray = 0; matchParamArray < keyCount; matchParamArray++ ){
  582.             if( key[matchParamArray].paramArray == data[i].paramArray ){
  583.                 break;
  584.             }
  585.         }
  586.         var whereString = makeFieldWhere( connection, key[matchParamArray].key, datatypeSet, datatypeCount );
  587.         var setString = "";
  588.         
  589.         for( var j = 0; j < data[i].fieldCount; j++ ){
  590.             var tempString = wrapSQLFieldValue( connection, data[i].field[j].value, data[i].field[j].datatype, 0 );
  591.             if( tempString == "" )    continue;
  592.             if( j == 0 )    setString = data[i].field[j].name + "=" + tempString;
  593.             else            setString += ", " + data[i].field[j].name + "=" + tempString;
  594.         }
  595.  
  596.         var sqlCommand = "UPDATE " + tableName + " SET " + setString + " WHERE " + whereString;
  597.         if( RuntimeDebug ){
  598.             RuntimeDebugMessage( "SQL Command = [" + sqlCommand + "]" );
  599.         }
  600.         var result = connection.Execute( sqlCommand );
  601.     }
  602.     return;
  603. }
  604.  
  605.  
  606. function deleteUsingPostDataDeleteQuery( connection, tableName )
  607. {
  608.     var datatypeSet = new Array;
  609.     var datatypeCount = getDatatypeSet( datatypeSet );
  610.  
  611.     var key = unescape( Request.Form( "$key" ));
  612.     var whereString = makeFieldWhere( connection, key, datatypeSet, datatypeCount );
  613.  
  614.     if( whereString.length != 0 ){
  615.         var sqlCommand = "DELETE FROM " + tableName + " WHERE " + whereString;
  616.         if( RuntimeDebug ){
  617.             RuntimeDebugMessage( "SQL Command = [" + sqlCommand + "]" );
  618.         }
  619.         var result=connection.Execute( sqlCommand );
  620.         }
  621.     return;
  622. }
  623.  
  624.  
  625. function addRecordUsingPostDataInsertQuery( connection, tableName )
  626. {
  627.     var datatypeSet = new Array;
  628.     var datatypeCount = getDatatypeSet( datatypeSet );
  629.  
  630.     var data = new Array;
  631.     var dataCount = getDataFromFormData( data, datatypeSet, datatypeCount );
  632.  
  633.     var key = new Array;
  634.     var keyCount = getKeyFromFormData( key, data, dataCount );
  635.  
  636.     for( var i = 0; i < dataCount; i++ ){
  637.         var fieldsString = "";
  638.         var valuesString = "";
  639.         
  640.         for( var j = 0; j < data[i].fieldCount; j++ ){
  641.             var tempString = wrapSQLFieldValue( connection, data[i].field[j].value, data[i].field[j].datatype, 0 );
  642.             if( tempString == "" )    continue;
  643.             if((( data[i].field[j].datatype == adDate )||( data[i].field[j].datatype == adDBDate )||( data[i].field[j].datatype == adDBTime )||( data[i].field[j].datatype == adDBTimeStamp ))&&( tempString == "''" )) continue;    // datetime datatype
  644.             if( j == 0 ){
  645.                 valuesString = tempString;
  646.                 fieldsString = data[i].field[j].name;
  647.             }else{
  648.                 valuesString += ", " + tempString;
  649.                 fieldsString += ", " + data[i].field[j].name;
  650.             }
  651.         }
  652.  
  653.         var sqlCommand = "INSERT INTO " + tableName + " ( " + fieldsString + " ) VALUES ( " + valuesString + " )";
  654.         if( RuntimeDebug ){
  655.             RuntimeDebugMessage( "SQL Command = [" + sqlCommand + "]" );
  656.         }
  657.         var result=connection.Execute( sqlCommand );
  658.     }
  659.     return;
  660. }
  661.  
  662.  
  663. function CSWRecordSet_SetupForm( contentSource )
  664. {
  665.     Response.Write( "<input type=\"hidden\" name=\"$connect\" value=\"" + obscure( contentSource.Data.ActiveConnection.ConnectionString ) + "\">" );
  666.     Response.Write( "<input type=\"hidden\" name=\"$source\" value=\"" + obscure( contentSource.Data.Source ) + "\">" );
  667.     var queryString = String( Request.QueryString );
  668.     if( queryString.indexOf( "RECORD_INDEX" ) < 0 ){
  669.         queryString = removeUrlParameter( queryString, "$key" );
  670.         queryString = removeUrlParameter( queryString, "RECORD_KEY" );
  671.         for( var i = 0; i < contentSource.PrimaryKey.length; i++ )    queryString = removeUrlParameter( queryString, contentSource.PrimaryKey[i] );
  672.         if( queryString.length == 0 )    queryString += "RECORD_INDEX=" + contentSource.AbsolutePosition;
  673.         else                            queryString += "&RECORD_INDEX=" + contentSource.AbsolutePosition;
  674.     }
  675.     Response.Write( "<input type=\"hidden\" name=\"$return\" value=\"" + Request( "URL" ) + "?" + queryString + "\">" );
  676.     var datatypes = "";
  677.     for( var i = 0; i < contentSource.Data.Fields.Count; i++ ){
  678.         if( i != 0 )    datatypes += "&";
  679.         datatypes += contentSource.Data.Fields.Item( i ).Name + "=" + contentSource.Data.Fields.Item( i ).Type;
  680.     }
  681.     Response.Write("<input type=\"hidden\" name=\"$datatypes\"  value=\"" + obscure( datatypes ) + "\">");
  682. }
  683.  
  684.  
  685. </SCRIPT>
  686.  
  687.